home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <glib.h>
- #include "land.h"
-
- /* #include "..\lib.h" */
-
- /* math error no. */
- int mathern;
-
- /*
- int matherr(x)
- struct exception *x;
- {
- mathern = x->type+1000;
- return(1);
- }
- */
-
- void mcu1()
- {
- int xpnt, ypnt;
- MOS_CUS cus;
-
- xpnt = 0; ypnt = 0;
- cus.xcnt = 16; cus.ycnt = 16;
- cus.color = col15;
- cus.type[0] = 0x8f; cus.type[1] = 0xff;
- cus.type[2] = 0x07; cus.type[3] = 0xff;
- cus.type[4] = 0x03; cus.type[5] = 0xff;
- cus.type[6] = 0x81; cus.type[7] = 0xff;
- cus.type[8] = 0xc0; cus.type[9] = 0x03;
- cus.type[10] = 0xe0; cus.type[11] = 0x01;
- cus.type[12] = 0xf0; cus.type[13] = 0x00;
- cus.type[14] = 0xf0; cus.type[15] = 0x00;
- cus.type[16] = 0xe0; cus.type[17] = 0x00;
- cus.type[18] = 0xe0; cus.type[19] = 0x00;
- cus.type[20] = 0xe0; cus.type[21] = 0x00;
- cus.type[22] = 0xe0; cus.type[23] = 0x00;
- cus.type[24] = 0xf0; cus.type[25] = 0x01;
- cus.type[26] = 0xf8; cus.type[27] = 0x01;
- cus.type[28] = 0xfc; cus.type[29] = 0x03;
- cus.type[30] = 0xfe; cus.type[31] = 0x0f;
-
- cus.type[32] = 0x00; cus.type[33] = 0x00;
- cus.type[34] = 0x70; cus.type[35] = 0x00;
- cus.type[36] = 0x78; cus.type[37] = 0x00;
- cus.type[38] = 0x3c; cus.type[39] = 0x00;
- cus.type[40] = 0x1e; cus.type[41] = 0x00;
- cus.type[42] = 0x0f; cus.type[43] = 0xfc;
- cus.type[44] = 0x07; cus.type[45] = 0xfe;
- cus.type[46] = 0x07; cus.type[47] = 0xfe;
- cus.type[48] = 0x0f; cus.type[49] = 0xfe;
- cus.type[50] = 0x0f; cus.type[51] = 0xfe;
- cus.type[52] = 0x0f; cus.type[53] = 0xfe;
- cus.type[54] = 0x0f; cus.type[55] = 0xfe;
- cus.type[56] = 0x07; cus.type[57] = 0xfc;
- cus.type[58] = 0x03; cus.type[59] = 0xfc;
- cus.type[60] = 0x01; cus.type[61] = 0xf0;
- cus.type[62] = 0x00; cus.type[63] = 0x00;
-
- MOS_type(xpnt, ypnt, &cus);
- }
-
- void mcu2()
- {
- int xpnt, ypnt;
- MOS_CUS cus;
-
- xpnt = 0; ypnt = 4;
- cus.xcnt = 16; cus.ycnt = 16;
- cus.color = col15;
- cus.type[0] = 0xc0; cus.type[1] = 0x3f;
- cus.type[2] = 0x80; cus.type[3] = 0x0f;
- cus.type[4] = 0x00; cus.type[5] = 0x03;
- cus.type[6] = 0x1e; cus.type[7] = 0x01;
- cus.type[8] = 0xff; cus.type[9] = 0x01;
- cus.type[10] = 0x1f; cus.type[11] = 0x00;
- cus.type[12] = 0x00; cus.type[13] = 0x00;
- cus.type[14] = 0x00; cus.type[15] = 0x00;
- cus.type[16] = 0x80; cus.type[17] = 0x00;
- cus.type[18] = 0xe0; cus.type[19] = 0x00;
- cus.type[20] = 0xfc; cus.type[21] = 0x00;
- cus.type[22] = 0xfe; cus.type[23] = 0x00;
- cus.type[24] = 0xff; cus.type[25] = 0x00;
- cus.type[26] = 0xff; cus.type[27] = 0x00;
- cus.type[28] = 0xff; cus.type[29] = 0x81;
- cus.type[30] = 0xff; cus.type[31] = 0xc3;
-
- cus.type[32] = 0x00; cus.type[33] = 0x00;
- cus.type[34] = 0x3f; cus.type[35] = 0xc0;
- cus.type[36] = 0x61; cus.type[37] = 0xf0;
- cus.type[38] = 0x00; cus.type[39] = 0x7c;
- cus.type[40] = 0x00; cus.type[41] = 0x7c;
- cus.type[42] = 0x00; cus.type[43] = 0x7e;
- cus.type[44] = 0x60; cus.type[45] = 0xfe;
- cus.type[46] = 0x7f; cus.type[47] = 0xfe;
- cus.type[48] = 0x1f; cus.type[49] = 0xfe;
- cus.type[50] = 0x03; cus.type[51] = 0xfe;
- cus.type[52] = 0x01; cus.type[53] = 0xfe;
- cus.type[54] = 0x00; cus.type[55] = 0xfe;
- cus.type[56] = 0x00; cus.type[57] = 0x7e;
- cus.type[58] = 0x00; cus.type[59] = 0x7e;
- cus.type[60] = 0x00; cus.type[61] = 0x3c;
- cus.type[62] = 0x00; cus.type[63] = 0x00;
-
- MOS_type(xpnt, ypnt, &cus);
- }
-
-
- void mcu3()
- {
- int xpnt, ypnt;
- MOS_CUS cus;
-
- xpnt = 7; ypnt = 7;
- cus.xcnt = 16; cus.ycnt = 16;
- cus.color = col15;
- cus.type[0] = 0xfc; cus.type[1] = 0x3f;
- cus.type[2] = 0xf0; cus.type[3] = 0x07;
- cus.type[4] = 0xf0; cus.type[5] = 0x07;
- cus.type[6] = 0xf0; cus.type[7] = 0x03;
- cus.type[8] = 0xf0; cus.type[9] = 0x03;
- cus.type[10] = 0xf0; cus.type[11] = 0x01;
- cus.type[12] = 0x80; cus.type[13] = 0x01;
- cus.type[14] = 0x80; cus.type[15] = 0x00;
- cus.type[16] = 0x80; cus.type[17] = 0x00;
- cus.type[18] = 0x80; cus.type[19] = 0x01;
- cus.type[20] = 0x80; cus.type[21] = 0x01;
- cus.type[22] = 0xc0; cus.type[23] = 0x03;
- cus.type[24] = 0xc0; cus.type[25] = 0x07;
- cus.type[26] = 0xe0; cus.type[27] = 0x07;
- cus.type[28] = 0xf0; cus.type[29] = 0x0f;
- cus.type[30] = 0xf0; cus.type[31] = 0x0f;
-
- cus.type[32] = 0x00; cus.type[33] = 0x00;
- cus.type[34] = 0x03; cus.type[35] = 0xc0;
- cus.type[36] = 0x07; cus.type[37] = 0xf0;
- cus.type[38] = 0x07; cus.type[39] = 0xf8;
- cus.type[40] = 0x07; cus.type[41] = 0xf8;
- cus.type[42] = 0x07; cus.type[43] = 0xfc;
- cus.type[44] = 0x07; cus.type[45] = 0xfc;
- cus.type[46] = 0x3f; cus.type[47] = 0xfe;
- cus.type[48] = 0x3f; cus.type[49] = 0xfe;
- cus.type[50] = 0x3f; cus.type[51] = 0xfc;
- cus.type[52] = 0x3f; cus.type[53] = 0xfc;
- cus.type[54] = 0x1f; cus.type[55] = 0xf8;
- cus.type[56] = 0x1f; cus.type[57] = 0xf0;
- cus.type[58] = 0x0f; cus.type[59] = 0xf0;
- cus.type[60] = 0x07; cus.type[61] = 0xe0;
- cus.type[62] = 0x00; cus.type[63] = 0x00;
-
- MOS_type(xpnt, ypnt, &cus);
- }
-
- void mcu4()
- {
- int xpnt, ypnt;
- MOS_CUS cus;
-
- xpnt = 7; ypnt = 7;
- cus.xcnt = 16; cus.ycnt = 16;
- cus.color = col15;
- cus.type[0] = 0xfe; cus.type[1] = 0xff;
- cus.type[2] = 0xfe; cus.type[3] = 0xff;
- cus.type[4] = 0xfe; cus.type[5] = 0xff;
- cus.type[6] = 0xfe; cus.type[7] = 0xff;
- cus.type[8] = 0xfe; cus.type[9] = 0xff;
- cus.type[10] = 0xfe; cus.type[11] = 0xff;
- cus.type[12] = 0xfe; cus.type[13] = 0xff;
- cus.type[14] = 0x03; cus.type[15] = 0x81;
- cus.type[16] = 0xfe; cus.type[17] = 0xff;
- cus.type[18] = 0xfe; cus.type[19] = 0xff;
- cus.type[20] = 0xfe; cus.type[21] = 0xff;
- cus.type[22] = 0xfe; cus.type[23] = 0xff;
- cus.type[24] = 0xfe; cus.type[25] = 0xff;
- cus.type[26] = 0xfe; cus.type[27] = 0xff;
- cus.type[28] = 0xfe; cus.type[29] = 0xff;
- cus.type[30] = 0xff; cus.type[31] = 0xff;
-
- cus.type[32] = 0x01; cus.type[33] = 0x00;
- cus.type[34] = 0x01; cus.type[35] = 0x00;
- cus.type[36] = 0x01; cus.type[37] = 0x00;
- cus.type[38] = 0x01; cus.type[39] = 0x00;
- cus.type[40] = 0x01; cus.type[41] = 0x00;
- cus.type[42] = 0x01; cus.type[43] = 0x00;
- cus.type[44] = 0x00; cus.type[45] = 0x00;
- cus.type[46] = 0xfc; cus.type[47] = 0x7e;
- cus.type[48] = 0x00; cus.type[49] = 0x00;
- cus.type[50] = 0x01; cus.type[51] = 0x00;
- cus.type[52] = 0x01; cus.type[53] = 0x00;
- cus.type[54] = 0x01; cus.type[55] = 0x00;
- cus.type[56] = 0x01; cus.type[57] = 0x00;
- cus.type[58] = 0x01; cus.type[59] = 0x00;
- cus.type[60] = 0x01; cus.type[61] = 0x00;
- cus.type[62] = 0x00; cus.type[63] = 0x00;
-
- MOS_type(xpnt, ypnt, &cus);
- }
-
- void calcu(int x, int y, int sw)
- {
- unsigned ddadr[2];
- unsigned char page = 0;
- char buf[32]; /* (16*16+7)/8 */
- int c1, c2, c3, c4;
-
- buf[0]=0xff; buf[1]=0xfe; buf[2]=0x80; buf[3]=0x02; buf[4]=0xbf; buf[5]=0xda; buf[6]=0xbf; buf[7]=0xda;
- buf[8]=0xbf; buf[9]=0xda; buf[10]=0x80; buf[11]=0x02; buf[12]=0xb6; buf[13]=0xda; buf[14]=0xb6; buf[15]=0xda;
- buf[16]=0x80; buf[17]=0x02; buf[18]=0xb6; buf[19]=0xda; buf[20]=0xb6; buf[21]=0xda; buf[22]=0x80; buf[23]=0x02;
- buf[24]=0xb6; buf[25]=0xda; buf[26]=0xb6; buf[27]=0xda; buf[28]=0x80; buf[29]=0x02; buf[30]=0xff; buf[31]=0xfe;
-
- if (sw == 0) {
- c1 = col0; c2 = col7; c3 = col8; c4 = col1;
- } else {
- c1 = col0; c2 = col8; c3 = col15; c4 = col15;
- }
- line(x+2, y+2, x+21, y+21, PSET, c1, 2, 0xffff);
- line(x, y, x+19, y+19, PSET, c2, 2, 0xffff);
- line(x, y, x+19, y+19, PSET, c3, 1, 0xffff);
- BSETDATAADR(ddadr, buf);
- GDS_putBlockColor(ddadr[0], ddadr[1], page, x+2, y+2, x+17, y+17, c4, PSET);
- }
-
- /* *x0, *y0 = 左上座標 xsiz, ysiz = ボックスの大きさ xpos, ypos = 左上座標からのカーソルの位置差 */
- void movbox(int *x0, int *y0, int xsiz, int ysiz, int xpos, int ypos)
- {
- int wx, wy, x, y;
- char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4, (400*1+7)/8*4 */
- unsigned ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
- unsigned char page = 0;
-
- x = *x0; y = *y0;
- BSETDATAADR(ddadr1x, buf1x);
- BSETDATAADR(ddadr2x, buf2x);
- BSETDATAADR(ddadr1y, buf1y);
- BSETDATAADR(ddadr2y, buf2y);
-
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2);
- line(x, y, x+xsiz-1, y+ysiz-1, PSET, col8, 1, 0xffff);
-
- while ((MOS_rdpos(&wx, &wy) & 0x01) == 1) {
- if (wx-xpos != x || wy-ypos != y) {
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2, PSET);
- x = wx-xpos, y = wy-ypos;
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2);
- line(x, y, x+xsiz-1, y+ysiz-1, PSET, col8, 1, 0xffff);
- }
- }
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2, PSET);
- *x0 = x; *y0 = y;
- return;
- }
-
-
- void box(int x, int y)
- {
- line(x, y, x+20, y, PSET, col15, 0, 0xffff);
- line(x, y, x, y+20, PSET, col15, 0, 0xffff);
- line(x, y+20, x+20, y+20, PSET, col8, 0, 0xffff);
- line(x+20, y+20, x+20, y, PSET, col8, 0, 0xffff);
- return;
- }
-
- void box2(int x, int y)
- {
- line(x, y, x+20, y, PSET, col8, 0, 0xffff);
- line(x, y, x, y+20, PSET, col8, 0, 0xffff);
- line(x, y+20, x+20, y+20, PSET, col15, 0, 0xffff);
- line(x+20, y+20, x+20, y, PSET, col15, 0, 0xffff);
- return;
- }
-
- /* xy check return( yes=1, no=0 ) */
- int xychk(int x, int y, int x1, int y1, int x2, int y2)
- {
- if (x1<=x && x<=x2 && y1<=y && y<=y2) return(1);
- return(0);
- }
-
- /* サブ・データ表示窓 */
- void subind(int x0, int y0, char *ch, int col)
- {
- line(x0+105,y0+5,x0+115,y0+14, PSET, col1, 2, 0xffff);
- line(x0+105,y0+5,x0+115,y0+14, PSET, col8, 1, 0xffff);
- symbol(x0+107, y0+5, ch, 1,1, col,0,PSET);
- }
-
- /* calcu input area 0,0,114,139 */
- void calcb(int x0, int y0)
- {
- int bcl[16];
- int xx,yy;
- bcl[0] = col1;
-
- /* 影枠 影塗色 */
- /* hatch(5); */
- line(x0+10, y0+10, x0+139, y0+139, PSET, col0, 2, 0xffff);
-
- /* キーボード */
- line(x0+0,y0+0,x0+130,y0+130, PSET, col7, 2, 0xffff);
- line(x0+0,y0+0,x0+130,y0+130, PSET, col1, 1, 0xffff);
- line(x0+130,y0+0,x0+133,y0+3, PSET, col1, 0, 0xffff);
- line(x0+133,y0+3,x0+133,y0+133, PSET, col1, 0, 0xffff);
- /* line(x0+133,y0+133,x0+130,y0+130, PSET, col1, 0, 0xffff); */
- line(x0+133,y0+133,x0+3,y0+133, PSET, col1, 0, 0xffff);
- line(x0+3,y0+133,x0+0,y0+130, PSET, col1, 0, 0xffff);
-
- /* キーボード外枠塗色 */
- drmode(PSET);
- paint(x0+131,y0+2, 1, col1, 1, bcl);
- paint(x0+2,y0+131, 1, col1, 1, bcl);
- paint(x0+131,y0+131, 1, col1, 1, bcl);
-
- /* データ表示窓 */
- line(x0+5,y0+5,x0+100,y0+25, PSET, col1, 2, 0xffff);
- line(x0+5,y0+5,x0+100,y0+25, PSET, col8, 1, 0xffff);
- /* サブ・データ表示窓 */
- line(x0+105,y0+5,x0+115,y0+14, PSET, col1, 2, 0xffff);
- line(x0+105,y0+5,x0+115,y0+14, PSET, col8, 1, 0xffff);
- /* test data subind(x0, y0, "e", 10); */
- /* キー作成 */
- xx=x0+105; yy=y0+16;
- line(xx, yy, xx+20, yy, PSET, col15, 0, 0xffff);
- line(xx, yy, xx, yy+9, PSET, col15, 0, 0xffff);
- line(xx, yy+9, xx+20, yy+9, PSET, col8, 0, 0xffff);
- line(xx+20, yy+9, xx+20, yy, PSET, col8, 0, 0xffff);
- line(xx+1,yy+1,xx+19,yy+8, PSET, col15, 0, 0xffff);
- line(xx+1,yy+8,xx+19,yy+1, PSET, col15, 0, 0xffff);
- /* symbol_(xx+2, yy+2, "終", 1,1, col15,0,PSET); */
- xx=x0+5; yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "7", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "8", 1,1, col15,0,PSET);
- xx=x0+55; yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "9", 1,1, col15,0,PSET);
- xx=x0+5; yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "4", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "5", 1,1, col15,0,PSET);
- xx=x0+55; yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "6", 1,1, col15,0,PSET);
- xx=x0+5; yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "1", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "2", 1,1, col15,0,PSET);
- xx=x0+55; yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "3", 1,1, col15,0,PSET);
- xx=x0+5; yy=y0+105;
- box(xx, yy);
- symbol_(xx+2, yy+2, "0", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+105;
- box(xx, yy);
- symbol_(xx+2+6, yy+2, ".", 1,1, col15,0,PSET);
- xx=x0+80, yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "÷", 1,1, col15,0,PSET);
- xx=x0+80, yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "×", 1,1, col15,0,PSET);
- xx=x0+80, yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "+", 1,1, col15,0,PSET);
- xx=x0+80, yy=y0+105;
- box(xx, yy);
- symbol_(xx+2, yy+2, "-", 1,1, col15,0,PSET);
- xx=x0+105, yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "C", 1,1, col15,0,PSET);
- xx=x0+105, yy=y0+55;
- box(xx, yy);
- symbol(xx+2, yy+2, "CE", 1,2, col15,0,PSET);
- xx=x0+105, yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "←", 1,1, col15,0,PSET);
- xx=x0+105, yy=y0+105;
- box(xx, yy);
- symbol_(xx+2, yy+2, "√", 1,1, col15,0,PSET);
- xx=x0+55, yy=y0+105;
- box(xx, yy);
- symbol_(xx+2, yy+2, "=", 1,1, col15,0,PSET);
- return;
- }
-
- void errind(int x0, int y0)
- {
- subind(x0, y0, "e", col10);
- }
-
- /* number indicate */
- void numind(int x0, int y0, char *nline)
- {
- /* データ表示窓 */
- line(x0+5,y0+5,x0+100,y0+25, PSET, col0, 2, 0xffff);
- line(x0+5,y0+5,x0+100,y0+25, PSET, col1, 2, 0xffff);
- line(x0+5,y0+5,x0+100,y0+25, PSET, col8, 1, 0xffff);
- symbol(x0+8, y0+8,nline, 1, 2, col14, 0, PSET);
- }
-
- /* num check and print */
- int numin(int x, int y, int nn, char nline[], int *ncnt, int *pf, int *nf)
- {
- if ((nn == '-' && *ncnt != 0) || (nn == '+') || (nn == 'x') || (nn == '/') || (nn == 'C') || (nn == 'c') || (nn == '=') || (nn == 'r')) {
- return(0);
- }
- if ((nn != '<' && *ncnt == 11 && *nf == 1) || ( nn == '.' && *pf != 0 && *nf == 1)) {
- putchar('\7'); return(0); /* error (but no error flag) */
- }
- if ( nn == '<' ) {
- if (*ncnt == 0 || *nf == 0 || *nf == 2) {
- putchar('\7'); /* error */
- return(1);
- } else {
- (*ncnt)--;
- symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col1, 0, PSET);
- if (nline[*ncnt] == '.') *pf = 0; /* flag clear */
- nline[*ncnt] = '\0';
- return(1);
- }
- }
- if (*nf == 0 || *nf == 2) {
- numind(x, y, "");
- nline[0] = '\0';
- *ncnt = 0;
- }
- if (nn == '.') *pf = 1; /* flag set */
- nline[*ncnt] = nn;
- nline[(*ncnt)+1] = '\0';
- symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col14, 0, PSET);
- (*ncnt)++;
- *nf = 1;
- return(1);
- }
-
- void calc2(int x, int y, int nn, double *ans, int *ope, char nline[], int *ncnt, int *pf, int *nf)
- {
- char buf[2];
- double ans2;
-
- mathern = 0; /* math error no. clear */
- buf[1] = '\0';
- if (nn != 'C') {
- if (*nf == -1) return; /* error */
- } else { /* error reset */
- *nf = 0; *ope = '+';
- *ncnt = 0; *pf = 0;
- nline[0] = '\0';
- *ans = 0;
- numind(x, y, "");
- subind(x, y, "", col1);
- return;
- }
- if (nn == 'c') {
- *nf = 0;
- *ncnt = 0; *pf = 0;
- nline[0] = '\0';
- numind(x, y, "");
- return;
- }
- if (numin(x, y, nn, nline, ncnt, pf, nf) != 0) return;
- buf[0] = nn;
- if (nn == '/') {
- subind(x, y, "-", col14);
- symbol(x+107, y+5, ":", 1,1, col14,0,PSET);
- } else {
- if (nn != 'r') subind(x, y, buf, col14);
- }
- if ((nn != 'r') && (*nf != 2) && (*ncnt == 0 || *nf == 0)) {
- *ope = nn;
- return;
- } else {
- if (nn == 'r') {
- ans2 = sqrt(atof(nline));
- *nf = 2;
- } else {
- switch (*ope) {
- case '+': *ans = *ans + atof(nline); break;
- case '-': *ans = *ans - atof(nline); break;
- case 'x': *ans = *ans * atof(nline); break;
- case '/': *ans = *ans / atof(nline); break;
- case '=': *ans = atof(nline); break;
- case 'c': nline[0] = '\0';
- *ncnt = 0;
- numind(x, y, "");
- break;
- }
- *ope = nn; /* *ope = ope code */
- *nf = 0; /* *nf = num flag if eqaul zero then not num */
- ans2 = *ans;
- }
- }
- /*
- for debug
- printf("ope=%c nn= %c ans= %f nline= %s\n",*ope, nn, *ans, nline);
- */
- if (fabs(ans2) > 9999999999) {
- *nf = -1;
- errind(x, y);
- } else {
- sprintf(nline, "%f\0", ans2);
- nline[11] = '\0';
- *ncnt = strlen(nline);
- numind(x, y, nline);
- }
- if (mathern != 0) {
- *nf = -1; /* if math error then error flag set */
- errind(x, y);
- }
- return;
- }
-
- /* mouse input */
- /* return = 0:not input, 1:input */
- /* *pnum = anser */
- int calc(int *px, int *py, double *pnum)
- {
- int x, y, x2, y2, calflg=0;
- int ncnt = 0, pf = 0, mx, my, nn, xw, yw, ope = '+', nf = 0; /* nf = 0, 1 , 2, -1 : (calc, num, sqrt, errflag) */
- int i;
- double ans = 0;
- char nline[24]; /* 12 */
- unsigned ddadr[2], ddadr2[2];
- unsigned char page;
- char buf[9804], buf2[1641]; /* (140*140+7)/8*4, (126*26+7)/8*4 */
-
- x = *px; y = *py;
-
- for (i=0; i <12; i++) nline[i]=0;
- BSETDATAADR(ddadr, buf);
- BSETDATAADR(ddadr2, buf2);
-
- start:;
- MOS_disp(1); /* mouse disp off */
- page = 0;
- GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+139, y+139);
- calcb(x,y);
- if (calflg != 0) {
- GDS_putBlock(ddadr2[0], ddadr2[1], page, x, y, x+125, y+25, PSET);
- }
- calflg = 1;
- MOS_horizon(x, x+130);
- MOS_vertical(y, y+130);
- MOS_disp(0); /* mouse disp on */
-
- while (1) {
- nn = 0;
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (xychk(mx, my, x+115,y+5,x+125,y+15) == 1) {
- page = 0;
- x2 = x; y2 = y;
- MOS_horizon(150, 610);
- MOS_vertical(20, 250);
- GDS_getBlock(ddadr2[0], ddadr2[1], page, x, y, x+125, y+25);
- mcu2();
- movbox(&x, &y, 131, 131, 120, 10);
- mcu1();
- GDS_putBlock(ddadr[0], ddadr[1], page, x2, y2, x2+139, y2+139, PSET);
- goto start;
- /* all reset
- GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+139, y+139);
- GDS_putBlock(ddadr2[0], ddadr2[1], page, x, y, x+125, y+15, PSET);
- MOS_horizon(x, x+130);
- MOS_vertical(y, y+130);
- continue;
- */
- }
- for (i=1; i==1; i++) {
- if (xychk(mx, my, xw=x+5, yw=y+30, x+25, y+50) == 1) { nn = '7'; break; }
- if (xychk(mx, my, xw=x+30, yw=y+30, x+50, y+50) == 1) { nn = '8'; break; }
- if (xychk(mx, my, xw=x+55, yw=y+30, x+75, y+50) == 1) { nn = '9'; break; }
- if (xychk(mx, my, xw=x+5, yw=y+55, x+25, y+75) == 1) { nn = '4'; break; }
- if (xychk(mx, my, xw=x+30, yw=y+55, x+50, y+75) == 1) { nn = '5'; break; }
- if (xychk(mx, my, xw=x+55, yw=y+55, x+75, y+75) == 1) { nn = '6'; break; }
- if (xychk(mx, my, xw=x+5, yw=y+80, x+25,y+100) == 1) { nn = '1'; break; }
- if (xychk(mx, my, xw=x+30, yw=y+80, x+50,y+100) == 1) { nn = '2'; break; }
- if (xychk(mx, my, xw=x+55, yw=y+80, x+75,y+100) == 1) { nn = '3'; break; }
- if (xychk(mx, my, xw=x+5, yw=y+105,x+25,y+125) == 1) { nn = '0'; break; }
- if (xychk(mx, my, xw=x+30, yw=y+105,x+50,y+125) == 1) { nn = '.'; break; }
- if (xychk(mx, my, xw=x+55, yw=y+105,x+75,y+125) == 1) { nn = '='; break; }
- if (xychk(mx, my, xw=x+80, yw=y+30, x+100,y+50) == 1) { nn = '/'; break; }
- if (xychk(mx, my, xw=x+80, yw=y+55, x+100,y+75) == 1) { nn = 'x'; break; }
- if (xychk(mx, my, xw=x+80, yw=y+80, x+100,y+100) == 1) { nn = '+'; break; }
- if (xychk(mx, my, xw=x+80, yw=y+105,x+100,y+125) == 1) { nn = '-'; break; }
- if (xychk(mx, my, xw=x+105,yw=y+30, x+125,y+50) == 1) { nn = 'C'; break; }
- if (xychk(mx, my, xw=x+105,yw=y+55, x+125,y+75) == 1) { nn = 'c'; break; }
- if (xychk(mx, my, xw=x+105,yw=y+80, x+125,y+100) == 1) { nn = '<'; break; } /* back spase */
- if (xychk(mx, my, xw=x+105,yw=y+105,x+125,y+125) == 1) { nn = 'r'; break; }
- xw = 0; yw = 0;
- }
- if (xychk(mx, my, x+105, y+16,x+125,y+25) == 1) {
- xw=x+105; yw=y+16;
- line(xw, yw, xw+20, yw, PSET, col8, 0, 0xffff);
- line(xw, yw, xw, yw+9, PSET, col8, 0, 0xffff);
- line(xw, yw+9, xw+20, yw+9, PSET, col15, 0, 0xffff);
- line(xw+20, yw+9, xw+20, yw, PSET, col15, 0, 0xffff);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, x+105, y+16,x+125,y+25) != 1) {
- line(xw, yw, xw+20, yw, PSET, col15, 0, 0xffff);
- line(xw, yw, xw, yw+9, PSET, col15, 0, 0xffff);
- line(xw, yw+9, xw+20, yw+9, PSET, col8, 0, 0xffff);
- line(xw+20, yw+9, xw+20, yw, PSET, col8, 0, 0xffff);
- continue;
- } else {
- MOS_horizon(0, 639);
- MOS_vertical(0, 399);
- GDS_putBlock(ddadr[0], ddadr[1], page, x, y, x+139, y+139, PSET);
- *px = x; *py = y;
- if (nline[0] == '\0') {
- *pnum = 0;
- return(0);
- } else {
- *pnum = atof(nline);
- return(1);
- }
- }
- } else {
- if (xw != 0) box2(xw, yw);
- if (nn != 0) calc2(x, y, nn, &ans, &ope, nline, &ncnt, &pf, &nf);
- else putchar('\7');
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xw != 0) box(xw, yw);
- }
- }
- }
-
- /* end of file */